
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>About - Telepresence</title>
    <link rel="canonical" href="https://www.telepresence.io/about.html"/>
    <meta name="description" content="Telepresence: a local development environment for a remote Kubernetes cluster">
    <meta name="keywords" content="Telepresence, Kubernetes, microservices">
    <meta name="author" content="Ambassador Labs">

    <link rel="shortcut icon" href="/favicon.ico">

    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,900"
          type="text/css" media="all" />
    <link rel="stylesheet" href="/styles/home.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.css">

    <!--[if lte IE 8]>
    <script charset="utf-8" type="text/javascript" src="https://js.hsforms.net/forms/v2-legacy.js"></script>
    <![endif]-->
    <script charset="utf-8" type="text/javascript" src="https://js.hsforms.net/forms/v2.js"></script>

    <!-- Google Tag Manager -->
    <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});
        var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';
        j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
    })(window,document,'script','dataLayer','GTM-KMVFH7G');</script>
    <!-- End Google Tag Manager -->

</head>
<body>
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-KMVFH7G"
                  height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
<header class="white-bg">
    <div class="navigation-left">
        <a class="datawire-link" href="/">
            <img alt="Telepresence" src="/images/telepresence-logo.png">
        </a>
        <ul class="main-navigation">
            <li>
                <a href="/tutorials/docker">Get Started</a>
            </li>
            <li>
                <a href="/discussion/overview">Docs</a>
            </li>
            <li>
                <a href="/case-studies">Case Studies</a>
            </li>
            <li>
                <a href="/community">Community</a>
            </li>
            <li>
                <a href="/about">About</a>
            </li>
            <li>
                <a target="_blank" href="https://github.com/telepresenceio/telepresence">GitHub</a>
            </li>
        </ul>
    </div>
    <div class="navigation-right">
        <ul class="main-navigation right">
            <li>
                <div class="dropdown">
                    <button class="dropbtn">▾ Need Help?</button>
                    <div class="dropdown-content">
                        <a target="_blank" href="https://a8r.io/slack">Community Slack</a>
                    </div>
                </div>
            </li>
        </ul>
    </div>
</header>

<section class="banner">
    <div class="banner__text">
        Telepresence 2 is open source and available to preview now! 
        <a href="https://www.getambassador.io/docs/latest/telepresence/quick-start" target="_blank" class="banner__link">Learn more</a> 
        <img alt="" class="banner__icon" src="/images/arrow.inline.svg">
    </div>
</section>

<section id="about-page" class="bg-white">
    <div class="container">
        <h1 class="text-lg">About</h1>
        <p>Telepresence is an open source tool that lets you run a single service locally, while connecting that
            service to a remote Kubernetes cluster.</p>
        <p>
            Telepresence was originally built by the team at
            <a target="_blank" href="https://www.getambassador.io/">Ambassador Labs</a>, which builds open source development tools
            for Kubernetes, including <a target="_blank" href="https://forge.sh/">Forge</a> and
            <a target="_blank" href="https://www.getambassador.io">Ambassador</a>. The current list of maintainers of
            Telepresence are listed in the
            <a target="_blank" href="https://github.com/telepresenceio/telepresence/blob/master/MAINTAINERS.md">MAINTAINERS.md</a>
            file.</p>
        <p>
            We welcome all community contributions. If you find a bug or a mistake in the documentation, you can help us
            out by <a target="_blank" href="https://github.com/telepresenceio/telepresence/issues/new">submitting an issue</a>
            or a pull request with a fix. If you have questions, join our active
            <a target="_blank" href="https://a8r.io/slack">Slack
            community</a> or <a target="_blank" href="https://www.getambassador.io/editions/">contact us</a> about paid
            support plans.
        </p>

        <div class="bg-white content-box text-center">
            <h1 class="text-lg">Stay Updated</h1>
            <p class="font-light text-md">Telepresence is under active development. Subscribe to get updates and announcements:</p>
            <div class="mailing-list-signup">
                <script type="text/javascript">
                    hbspt.forms.create({
                        css: '',
                        portalId: '485087',
                        formId: '956287a4-7614-486b-91bd-28c9a91949cb'
                    });
                </script>
            </div>
        </div>
    </div>
</section>
<footer class="white-bg">
    <ul class="main-navigation flex-center">
        <li>
            <a href="/">Home</a>
        </li>
        <li>
            <a href="/tutorials/kubernetes">Get Started</a>
        </li>
        <li>
            <a href="/discussion/overview">Docs</a>
        </li>
        <li>
            <a href="/case-studies">Case Studies</a>
        </li>
        <li>
            <a href="/about">About</a>
        </li>
        <li>
            <a target="_blank" href="https://github.com/telepresenceio/telepresence">GitHub</a>
        </li>
        <li>
            <a target="_blank" href="https://a8r.io/slack">Slack</a>
        </li>
    </ul>
</footer>
<script async defer src="https://buttons.github.io/buttons.js"></script>
<script src="/js/jquery-3.2.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js"></script>
<script>
    $(document).ready(function() {
        changeTab($('.about-tabs li.tab:first-child').data('tabid'));

        $('.about-tabs li.tab').click(function() {
            changeTab($(this).data('tabid'));
        });

        function changeTab(tabId) {
            $('.about-tabs li.tab').removeClass('active');
            $('.about-tabs li.tab[data-tabId="'+tabId+'"]').addClass('active');
            $('.tab-content div').hide();
            $('#' + tabId).show();
        }

        $('.quotes').slick();

        $('.alert .close').click(function(e) {
            $(this).parent().hide();
        });

        /*
         Smooth scrolling. Ref: https://css-tricks.com/snippets/jquery/smooth-scrolling/
         */
        $('a[href*="#"]')
                .not('[href="#"]')
                .not('[href="#0"]')
                .click(function(event) {
                    // On-page links
                    if (
                            location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '')
                            &&
                            location.hostname == this.hostname
                    ) {
                        // Figure out element to scroll to
                        var target = $(this.hash);
                        target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
                        // Does a scroll target exist?
                        if (target.length) {
                            // Only prevent default if animation is actually gonna happen
                            event.preventDefault();
                            $('html, body').animate({
                                scrollTop: target.offset().top
                            }, 1000, function() {
                                // Callback after animation
                                // Must change focus!
                                var $target = $(target);
                                $target.focus();
                                if ($target.is(":focus")) { // Checking if the target was focused
                                    return false;
                                } else {
                                    $target.attr('tabindex','-1'); // Adding tabindex for elements not focusable
                                    $target.focus(); // Set focus again
                                };
                            });
                        }
                    }
                });

        /*
         * Replace all SVG images with inline SVG so we can change it's color when active
         * Ref: https://stackoverflow.com/questions/24933430/img-src-svg-changing-the-fill-color
         */
        $('img.svg').each(function(){
            var $img = $(this);
            var imgID = $img.attr('id');
            var imgClass = $img.attr('class');
            var imgURL = $img.attr('src');

            jQuery.get(imgURL, function(data) {
                // Get the SVG tag, ignore the rest
                var $svg = $(data).find('svg');

                // Add replaced image's ID to the new SVG
                if(typeof imgID !== 'undefined') {
                    $svg = $svg.attr('id', imgID);
                }
                // Add replaced image's classes to the new SVG
                if(typeof imgClass !== 'undefined') {
                    $svg = $svg.attr('class', imgClass+' replaced-svg');
                }

                // Remove any invalid XML tags as per http://validator.w3.org
                $svg = $svg.removeAttr('xmlns:a');

                // Check if the viewport is set, if the viewport is not set the SVG wont't scale.
                if(!$svg.attr('viewBox') && $svg.attr('height') && $svg.attr('width')) {
                    $svg.attr('viewBox', '0 0 ' + $svg.attr('height') + ' ' + $svg.attr('width'))
                }

                // Replace image with new SVG
                $img.replaceWith($svg);

            }, 'xml');

        });
    });
</script>
</body>
</html>
